#ifndef HOUGHFRAME4D_H
#define HOUGHFRAME4D_H

/**
* \file HoughFrame4D.h
* \brief Fichier contenant la déclaration de la classe HoughFrame.
*/

#include <common/meshmodel.h>
#include <common/interfaces.h>

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include "Point.h"

using namespace std;


class HoughFrame4D
{
	/* \class Hough
	* \brief Cette classe représente une case de l'espace de Hough.
	*/
	private :

		int score;                              /*!<score de cette case de l'espace de Hough*/
		vcg::Point4f bot;			/*!<Coin inferieur gauche d'une case de l'espace de Hough*/
		vcg::Point4f top;			/*!<Coin supérieur droit d'une case de l'espace de Hough*/

	public :

		/*!
		*  \brief Constructeur de la classe HoughFrame
		*
		*  Constructeur de la classe HoughFrame
		*/
		HoughFrame4D();

		/*!
		*  \brief Constructeur de la classe HoughFrame
		*
		*  Constructeur de la classe HoughFrame
		*
		*  \param _bot : Coin inferieur gauche définissant la case.
		*  \param _top : Coin superieur droit définissant la case.
		*/
		HoughFrame4D(vcg::Point4f _bot, vcg::Point4f _top);

		/*!
		*  \brief Constructeur de la classe HoughFrame
		*
		*  Constructeur de la classe HoughFrame
		*
		*  \param _bot : Coin inferieur gauche définissant la case.
		*  \param _top : Coin superieur droit définissant la case.
		*      \param _score : Score de la case.
		*/
		HoughFrame4D(vcg::Point4f _bot, vcg::Point4f _top, int _score);

		/*!
		*  \brief Renvoie le point inferieur gauche de la case.
		*
		*  Renvoie le point inferieur gauche de la case.
		*
		*  \return : Renvoie le point inferieur gauche de la case.
		*/
		inline vcg::Point4f getBotPoint () { return bot; }

		/*!
		*  \brief Renvoie le point superieur droit de la case.
		*
		*  Renvoie le point superieur droit de la case.
		*
		*  \return : Renvoie le point superieur droit de la case.
		*/
		inline vcg::Point4f getTopPoint () { return top; }

		/*!
		*  \brief Modificateur de la classe HoughFrame
		*
		*  Modificateur de la classe HoughFrame
		*
		*  \param _p : Le point _p sera affecté à l'attribut bot de l'objet.
		*  \return : void
		*/
		inline void setPointBot ( vcg::Point4f _p ) { bot = _p; }

		/*!
		*  \brief Modificateur de la classe HoughFrame
		*
		*  Modificateur de la classe HoughFrame
		*
		*  \param _p : Le point _p sera affecté à l'attribut top de l'objet.
		*  \return : void
		*/
		inline void setPointTop ( vcg::Point4f _p ) { top = _p; }

		/*!
		*  \brief Accesseur de la classe HoughFrame
		*
		*  Renvoie le score de la case de l'espace de Hough.
		*
		*  \return : Score de la case
		*/
		inline int getScore() { return score; }

		/*!
		*  \brief Modificateur de la classe HoughFrame.
		*
		*  Attribue un score a la case de Hough
		*
		*  \param _score : score à affecter à la case de l'espace de Hough.
		*
		*  \return : void
		*/
		inline void setScore( int _score ) { score = _score; }

		/*!
		*  \brief Modificateur de la classe HoughFrame
		*
		*  Incrémente le score de la case de Hough.
		*
		*  \return : void
		*/
		inline void incrementScore () { score++; }

		/*!
		*  \brief Modificateur de la classe HoughFrame
		*
		*  Incrémente plusieurs fois le score de la case de Hough.
		*
		*  \return : void
		*/
		inline void incrementScore (int _val) { score+=_val; }
};

#endif

